package com.zenithsun.common.security.xss;

import com.syzg.core.util.StringUtil;

/**
 * 特殊字符过滤，XSS，CRLF
 * @author Jiang
 *
 */
public class XSSFilterManager {
	
	/**
	 * 将容易引起XSS漏洞的字符直接替换
	 * 
	 * @param s
	 * @return
	 */
	public static String xssEncode(String s) {
		
		
		if (s == null || s.isEmpty()) {
			return s;
		}
		StringBuilder sb = new StringBuilder(s.length() + 16);
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			switch (c) {
			case '<':
				sb.append("&lt;");
				break;
			case '>':
				sb.append("&gt;");
				break;
			case '&':
				sb.append("&amp;");
			case '"':
				sb.append("&quot;");
			case '(':
				sb.append("（");
			case ')':
				sb.append("）");
			case '=':
				sb.append("");
			case '\\':
				sb.append("");
			case '$':
				sb.append("");
			case '+':
				sb.append("");
			case '|':
				sb.append("");
			default:
				sb.append(c);
				break;
			}
		}
		
		if(s.toLowerCase().contains("script")){
			return "";
		}
		return sb.toString();
		
	}
	public static String xssEncode2(String s) {
		if(     s.indexOf("<") >-1 ||
				s.indexOf(">") >-1 ||
				s.indexOf("<") >-1 ||
				s.indexOf("(") >-1 ||
				s.indexOf(")") >-1 ||
				s.indexOf("'") >-1 ||
				s.indexOf(":") >-1 ||
				s.indexOf(";") >-1 ||
				s.indexOf("=") >-1)
		{return "";}
		return s;
	}
	/**
	 * 过滤换行、回车符
	 * @param str
	 * @return
	 */
	public static String crlfEncode(String str){
		// TODO 处理换行和空格符
		if(StringUtil.isBlank(str) || StringUtil.isEmpty(str)){
			return str;
		}
		str = str.replaceAll("\r", "").replaceAll("\n", "");
		return str;
	}
	/**
	 * XSS过滤   CRLF过滤
	 * @param str
	 * @return
	 */
	public static String xssAndCrlfEncode(String str){
		//TODO XSS过滤
		String temp = xssEncode(str);
		//TODO CRLF过滤
		return crlfEncode(temp);
	}
}
